﻿#pragma once
/**
@author 何炜
@date 2011/4/28
@brief .
@details
*/

#include "GLLSystem.h"
#include "GLLCamera.h"
#include "GLLObjMgr.h"

namespace GLL
{
	class LevelManager;

	/**虚拟世界通常是一个渲染引擎或者游戏引擎.*/
	class VirtualWorld : public System, protected ObjectManager
	{
	public:
		/**世界渲染质量.*/
		enum Quality
		{
			WQ_DISABLED,
			WQ_FASTEST,
			WQ_FAST,
			WQ_NORMOL,
			WQ_BETTER,
			WQ_BEST,
			WQ_QUALITY,
		};

	private:
		/**.*/
		void DoCreate_spec();

		/**.*/
		void DoDestroy_spec();

	public:
		/**.*/
		CamSrdPtr CreateCamera();

		/**.*/
		CamSrdPtr GetCamera(Index);

		/**.*/
		void DestroyCamera(Index);

		/**.*/
		void AutoSetQuality();

		/**设置世界渲染效果等级.*/
		bool SetQuality_spec(Quality);

		/**创建世界.*/
		void Create();

		/**.*/
		void OnScreenSizeChanged_spec(Size2Di&);

		/**销毁时间.*/
		void Destory();

		/**世界中的关卡管理器.*/
		LevelManager* _lvlMgr;

		void Update(TimeMS);

		/**.*/
		VirtualWorld();

		GLL_Mutex _renderMutex;

#ifdef GLL_OGRE
	public:
		Ogre::Root*	_root;
		Ogre::RenderWindow* _renderWindow;

	private:
		void _LoadPluginsOgre();
		Ogre::RenderSystem* _ChooseRendererOgre();
		void _ConfigRenderSystemOgre( Ogre::RenderSystem* pRenderSystem );
		bool _attachRendererToWindowOgre();
		void _ConfigEnvironmentOgre();

		/**将世界渲染一次.*/
		void RenderOneFrame_spec();
#endif GLL_OGRE

		typedef std::vector<CamSrdPtr> CamVec;
		CamVec _cams;

	protected:
		Quality _quality;
	};


}//GLL